package com.airlines.crewassignment.domain;

import java.util.List;

import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
import org.optaplanner.core.api.domain.solution.PlanningScore;
import org.optaplanner.core.api.domain.solution.PlanningSolution;
import org.optaplanner.core.api.domain.solution.drools.ProblemFactCollectionProperty;
import org.optaplanner.core.api.domain.solution.drools.ProblemFactProperty;
import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
import org.springframework.stereotype.Component;

import com.airlines.crewassignment.domain.rule.AssignmentRule;




/**
 * @author xxxx
 * @date 2018年3月28日 
 * @description 
 */
@Component
@PlanningSolution


public class CrewLinkLineRoster {
	
	private CrewLinkLineRosterGlobalValue crewLinkLineRosterGlobalValue;
	
	@ProblemFactCollectionProperty
	private List<LinkLine> linkLineList;
	
	@ProblemFactCollectionProperty
	private List<Position> positionList;
	
	@ValueRangeProvider(id = "crewRange")
	@ProblemFactCollectionProperty
	private List<Crew> crewList;
	
	@PlanningEntityCollectionProperty
	private List<CrewPositionAssignment> crewPositionAssignmentList;

	@ProblemFactCollectionProperty
	private List<AssignmentRule> assignmentRuleList;

	@PlanningScore
	private HardSoftScore score;
	
	@ProblemFactProperty
	private CrewLinkLineRoster getCrewLinkLineRoster(){
		return this;
	}

	public CrewLinkLineRosterGlobalValue getCrewLinkLineRosterGlobalValue() {
		return crewLinkLineRosterGlobalValue;
	}

	public void setCrewLinkLineRosterGlobalValue(CrewLinkLineRosterGlobalValue crewLinkLineRosterGlobalValue) {
		this.crewLinkLineRosterGlobalValue = crewLinkLineRosterGlobalValue;
	}

	public List<LinkLine> getLinkLineList() {
		return linkLineList;
	}

	public void setLinkLineList(List<LinkLine> linkLineList) {
		this.linkLineList = linkLineList;
	}

	public List<Position> getPositionList() {
		return positionList;
	}

	public void setPositionList(List<Position> positionList) {
		this.positionList = positionList;
	}

	public List<Crew> getCrewList() {
		return crewList;
	}

	public void setCrewList(List<Crew> crewList) {
		this.crewList = crewList;
	}

	public List<CrewPositionAssignment> getCrewPositionAssignmentList() {
		return crewPositionAssignmentList;
	}

	public void setCrewPositionAssignmentList(List<CrewPositionAssignment> crewPositionAssignmentList) {
		this.crewPositionAssignmentList = crewPositionAssignmentList;
	}

	public List<AssignmentRule> getAssignmentRuleList() {
		return assignmentRuleList;
	}

	public void setAssignmentRuleList(List<AssignmentRule> assignmentRuleList) {
		this.assignmentRuleList = assignmentRuleList;
	}

	public HardSoftScore getScore() {
		return score;
	}

	public void setScore(HardSoftScore score) {
		this.score = score;
	}
	
	
	
}
